# Универсальный фильтр ## Как создать дополнительную группу фильтрации по классу 1. На операции `lazyInitFilter` инициализируем дополнительную группу: ```scala override def lazyInitFilter(): Unit = { if (!fltManager.isPopulatedRootGroup) { Btk_FltPkg().createRootGroupByClass(fltManager, "Bs_Goods", "ТМЦ") } super.lazyInitFilter() } ``` 2. На `onApplyFiler` получаем текст фильтрации по группе: ```scala override def onApplyFilter(): Unit = { super.onApplyFilter() //проверяем, что группы инициализированы и фильтр активен в выборке if (fltManager.isPopulatedRootGroup && fltManager.isActive) { val alias = "tt" val macros = Btk_FltPkg().generateMacroByGroup(fltManager, "Bs_Goods", alias) selection.setMacro("GdsMacro", macros.where) } } ``` 3. В операции `onRefresh` используем установленный в `onApplyFiler` макрос: - Через метод `prepareSelectStatement` ```scala override protected def onRefresh: Recs = { prepareSelectStatement("&GdsMacro") } ``` - В тексте sql-запроса ```scala override protected def onRefresh: Recs = { """ select ..... from ..... where .... and &GdsMacro """ } ``` ## Как создать дополнительную группу фильтрации с произвольными атрибутами 1. На операции `lazyInitFilter` инициализируем дополнительную группу: ```scala override def lazyInitFilter(): Unit = { if (!fltManager.isPopulatedRootGroup) { Btk_FltPkg().createCustomRootGroup(fltManager, "Some_CustomGroup", "Произвольная группа", (builder) => { builder.addRefObjectAttr("idGds", "Тмц", "Bs_Goods") builder.addBasicAttr("sCode", "Код", AttributeTypes.Varchar, false) }) } super.lazyInitFilter() } ``` 2. На `onApplyFiler` получаем текст фильтрации по группе: ```scala override def onApplyFilter(): Unit = { super.onApplyFilter() //проверяем, что группы инициализированы и фильтр активен в выборке if (fltManager.isPopulatedRootGroup && fltManager.isActive) { val macros = Btk_FltPkg().generateMacroByGroup(fltManager, "Some_CustomGroup", "tt") selection.setMacro("SomeMacro", macros.where) } } ``` 3. В операции `onRefresh` используем установленный в `onApplyFiler` макрос: - Через метод `prepareSelectStatement` ```scala override protected def onRefresh: Recs = { prepareSelectStatement("&SomeMacro") } ``` - В тексте sql-запроса ```scala override protected def onRefresh: Recs = { """ select ..... from ..... where .... and &SomeMacro """ } ```